package cn.calin.day05.demo48Exception;

import java.io.FileNotFoundException;
import java.io.IOException;

/*
    throws关键字：异常处理的第一种方式，交给别人处理
    作用：
        当方法内部抛出异常对象的时候，那么我们就必须处理这个异常对象
        可以使用throws关键字处理异常对象，会把异常声明抛出给方法的调用者处理（自己不处理，给别人处理），最终交给JVM处理--中断处理
    使用格式：在方法声明是使用
        修饰符 返回值类型方法名（参数列表）throws{
            Throw new AAAException("产生原因");
            Throw new AAAException("产生原因");
            ...
    注意：
        1.throws关键字必须写在方法声明处
        2.throws关键字后面声明的异常必须是Exception或者Exception的子类
        3.方法内部如果抛出多个异常对象，那么throws后面也必须声明多个异常
            如果抛出的多个异常对象有子父类关系，那么直接声明父类的异常即可
        4.调用了一个声明抛出异常的方法，我们必须得处理声明的异常
            要么继续使用throws抛出，交给方法的调用者处理最终交给JVM
            要么try...catch自己处理异常

 */
public class Demo05Throws {
    /*
         FileNotFoundException extends IoException extends Exception
          如果抛出的多个异常对象有子父类关系，那么直接声明父类的异常即可
     */
    //public static void main(String[] args) throws FileNotFoundException,IOException{
    //public static void main(String[] args) throws IOException{
    public static void main(String[] args) throws Exception{
        readFile("c:\\a.txt");//路径没有问题，读取文件
    }
    /*
        定义一个方法，对传递的文件路径进行合法性判断
        如果路径不是”c:\\a.txt",那么我们就抛出文件找不到异常对象，告知方法的调用者
        注意：FileNotFoundException是编译异常，抛出了编译异常，就必须处理这个异常
        可以使用throws继续声明抛出FileNotFoundException这个异常，让方法的调用者处理

     */
    public static void readFile(String fileName)throws FileNotFoundException,IOException{
        if (!fileName.equals("c:\\a.txt")){
            throw new FileNotFoundException("传递文件路径不是”c:\\a.txt");
        }
        /*
            如果传递的路径不是.txt结尾
            那么我们就抛出IO异常对象，告知方法的调用者，方法的后缀名不对
         */
        if (!fileName.endsWith(".txt")){
            throw  new IOException("文件的后缀名不对");
        }
        System.out.println("路径没有问题，读取文件");
    }
}

